package com.mauriciobustamante.pruebapds;

import java.io.IOException;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.mauriciobustamante.modelo.Accion;
import com.mauriciobustamante.pruebapds.PacienteMaster.EnviarInformacionBackground;

import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.app.ProgressDialog;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class PrestacionPacienteMaster extends Activity {

	private EditText id;
	private EditText diagnostico;
	private EditText fecha;
	private EditText rut;
	private EditText prestacion;
	private TextView titulo;
	private Button boton;
		

	private int accion;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_prestacion_paciente_master);
        
        this.id = (EditText) findViewById(R.id.editTextId);
        this.rut = (EditText) findViewById(R.id.editTextRut);
        this.diagnostico = (EditText) findViewById(R.id.editTextDiagnostico);
        this.fecha = (EditText) findViewById(R.id.editTextFecha);
        this.prestacion = (EditText) findViewById(R.id.editTextPrestacion);        
        this.titulo = (TextView) findViewById(R.id.textViewTitulo);
        this.boton = (Button) findViewById(R.id.buttonBoton);
        
        
        Bundle bundle = this.getIntent().getExtras();
        if(bundle != null){

            this.accion  = bundle.getInt("accion");
            
            switch (this.accion) {
			case Accion.ACTUALIZAR:
				this.titulo.setText("Actualizar Prestacion Paciente");
				this.boton.setText("actualizar");
				
				break;
			
			case Accion.CREAR:
				this.titulo.setText("Crear Prestacion Paciente");
				this.boton.setText("crear");
				break;
				
			case Accion.ELIMINAR:
				this.titulo.setText("Eliminar Prestacion Paciente");
				this.boton.setText("eliminar");
				break;
				
			case Accion.OBTENER:
				this.titulo.setText("Obtener Prestacion Paciente");
				this.boton.setText("obtener");
				break;

			default:
				break;
			}
        }
        
        
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_prestacion_paciente_master, menu);
        return true;
    }
    
    
    public void accionarBoton(View v){
    	JsonObject json = new JsonObject();
    	    	
    	String id = this.id.getText().toString();
    	String rut = this.rut.getText().toString();
    	String diagnostico = this.diagnostico.getText().toString();
    	String fecha = this.fecha.getText().toString();
    	String prestacion = this.prestacion.getText().toString();
    	
    	
    	if( (id == null || id.equalsIgnoreCase("")) && this.accion != Accion.CREAR){
    		Toast.makeText(PrestacionPacienteMaster.this, "Faltan datos - id", Toast.LENGTH_LONG).show();
    		return;
    	}
    	
    	switch (this.accion) {
		case Accion.ACTUALIZAR:
			json.addProperty("id", id);
			json.addProperty("rut", rut);
			json.addProperty("diagnostico", diagnostico);
			json.addProperty("fecha", fecha);
			json.addProperty("prestacion", prestacion);
			new EnviarInformacionBackground().execute("updatePaciente",json.toString());
			break;

			
		case Accion.CREAR:
			
			if( (rut == null || rut.equalsIgnoreCase("")) ||
				(diagnostico == null || diagnostico.equalsIgnoreCase("")) ||
				(fecha == null || fecha.equalsIgnoreCase("")) ||
				(prestacion == null || prestacion.equalsIgnoreCase("")) ){
				
        		Toast.makeText(PrestacionPacienteMaster.this, "Faltan datos", Toast.LENGTH_LONG).show();
        		return;
        	} 

			json.addProperty("rut", rut);
			json.addProperty("diagnostico", diagnostico);
			json.addProperty("fecha", fecha);
			json.addProperty("prestacion", prestacion);
			
			new EnviarInformacionBackground().execute("addPrestacionPaciente",json.toString());
			break;
			
		case Accion.ELIMINAR:
			json.addProperty("id", id);
			new EnviarInformacionBackground().execute("deletePrestacionPaciente",json.toString());
			break;
			
		case Accion.OBTENER:
			json.addProperty("id", id);
			new EnviarInformacionBackground().execute("getPrestacionPaciente",json.toString());
			break;

		default:
			break;
		}
    }
    
    public void procesarRespuesta(String respuesta){
    	JsonParser parser = new JsonParser();
    	JsonObject json = (JsonObject) parser.parse(respuesta);
    	
    	if(!json.has("respuesta") || !json.has("resultado")){
    		Toast.makeText(PrestacionPacienteMaster.this, "Error en la respuesta obtenida", Toast.LENGTH_LONG).show();
    		return;
    	}
    	
    	// error
    	if(json.get("resultado").getAsInt() == 0){
    		Toast.makeText(PrestacionPacienteMaster.this, "Error: "  + json.get("respuesta").getAsString(), Toast.LENGTH_LONG).show();
    		return;
    	}
    	
    	switch (this.accion) {
		case Accion.ACTUALIZAR:
			Toast.makeText(PrestacionPacienteMaster.this, "El paciente ha sido actualizado", Toast.LENGTH_LONG).show();			
			break;
		
		case Accion.CREAR:
			Toast.makeText(PrestacionPacienteMaster.this, "El paciente ha sido creado", Toast.LENGTH_LONG).show();
			break;
			
		case Accion.ELIMINAR:
			Toast.makeText(PrestacionPacienteMaster.this, "El paciente ha sido eliminado", Toast.LENGTH_LONG).show();
			break;
			
		case Accion.OBTENER:
			JsonObject prestacion = json.get("respuesta").getAsJsonObject();
			
			this.id.setText(prestacion.get("id").getAsString());
	    	this.rut.setText(prestacion.get("rut").getAsString());
	    	this.diagnostico.setText(prestacion.get("diagnostico").getAsString());
	    	this.fecha.setText(prestacion.get("fecha").getAsString());
	    	this.prestacion.setText(prestacion.get("prestacion").getAsString());
			
			break;

		default:
			break;
		}
    	
    
    }
    
    class EnviarInformacionBackground extends AsyncTask<String, Void, String>{
		
		private ProgressDialog progressDialog;

		@Override
		protected void onPreExecute() {
    		progressDialog = ProgressDialog.show(
    				PrestacionPacienteMaster.this,
    				"Prestacion Paciente", 
    				"Espere mientras se procesa la peticion...", 
    				true);
			super.onPreExecute();
		}
		
		// param[0] = nombre Metodo
	    // param[1] = json
		@Override
		protected String doInBackground(String... params) {

			String resultado = "";
			String METHOD_NAME = params[0];
			String SOAP_ACTION = Accion.NAMESPACE + "/" +METHOD_NAME;
			SoapObject request = new SoapObject(Accion.NAMESPACE, METHOD_NAME);
			SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
			soapEnvelope.dotNet = true;
			soapEnvelope.implicitTypes = true;
			soapEnvelope.setOutputSoapObject(request);
			request.addProperty("json", params[1]);
			HttpTransportSE aht = new HttpTransportSE(Accion.URL);

			try {
				aht.call(SOAP_ACTION, soapEnvelope);
				SoapPrimitive resultString = (SoapPrimitive)soapEnvelope.getResponse();
				resultado = resultString.toString();

			} catch (IOException e) {
				e.printStackTrace();
			} catch (XmlPullParserException e) {
				e.printStackTrace();
			}

			return resultado;
		}

		@Override
		protected void onPostExecute(String result) {
			super.onPostExecute(result);
			PrestacionPacienteMaster.this.procesarRespuesta(result);
			progressDialog.dismiss();
		}
	}
}
